package ongd.web;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import ongd.negocio.gestion.ControladorVoluntario;
import ongd.negocio.gestion.Persona;
import ongd.servicios.persistencia.exceptions.IllegalOrphanException;
import ongd.servicios.persistencia.exceptions.NonexistentEntityException;
import org.primefaces.context.RequestContext;

/**
 * Clase que se encargará de listar los voluntarios que no estén activos.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
@ManagedBean
@ViewScoped
public class Listado_BajaVoluntario extends ABean {

    /**
     * Objeto de tipo controlador de voluntario, que permite acceder a los método 
     * para realizar las operaciones adecuadas con los voluntarios.
     */
    private ControladorVoluntario controlVoluntario;
    /**
     * Objeto de tipo persona que guarda los datos del voluntario con el que vamso a trabajar.
     */
    private Persona voluntario;
    /**
     * Objeto de tipo lista de personas, que mantiene la lista de voluntarios
     * que están desactivados.
     */
    private List<Persona> voluntarios;
    /**
     * Objeto de tipo String que va a contener el título de la página donde
     * estemos.
     */
    private String titulo;

    /**
     * Constructor de la clase.
     */
    public Listado_BajaVoluntario() {
        SesionBean sesion = getSesionBean();
        if (sesion.iniciadaSesion()) {
            titulo = "Gestionar Bajas - Voluntario";
            voluntario = new Persona();
            voluntarios = new ArrayList<Persona>();
            controlVoluntario = sesion.getControladorVoluntario();
            voluntarios = controlVoluntario.obtenerVoluntariosDesactivados();
        }
    }

    /**
     * Método que carga las variables iniciales según el punto de acceso.
     */
    @Override
    public void cargaInicial() {
    }

    /**
     * Método que activa un voluntario.
     * @return null.
     */
    public String activar() {
        if (getSesionBean().iniciadaSesion()) {
            RequestContext requestContext = RequestContext.getCurrentInstance();
            try {
                if (controlVoluntario.activarVoluntario(voluntario)) {
                    requestContext.addCallbackParam("activadoOK", true);
                    voluntarios = controlVoluntario.obtenerVoluntariosDesactivados();
                } else {
                    requestContext.addCallbackParam("activadoOK", true);
                    voluntarios = controlVoluntario.obtenerVoluntariosDesactivados();
                }

            } catch (IllegalOrphanException ex) {
                Logger.getLogger(Listado_BajaVoluntario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(Listado_BajaVoluntario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(Listado_BajaVoluntario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    /**
     * Método que devuelve el valor del controlador.
     * @return controlador de voluntario.
     * @see #setControlVoluntario
     */
    public ControladorVoluntario getControlVoluntario() {
        return controlVoluntario;
    }

    /**
     * Método que devuelve el voluntario con el que estamos trabajando.
     * @return voluntario
     * @see #setVoluntario
     */
    public Persona getVoluntario() {
        return voluntario;
    }

    /**
     * Método que devuelve la lista de voluntarios no activos.
     * @return lista de voluntarios.
     * @see #setVoluntarios
     */
    public List<Persona> getVoluntarios() {
        return voluntarios;
    }

    /**
     * Método que asigna un nuevo valor al controlador de voluntario.
     * @param controlVoluntario nuevo valor del controlador. 
     * @see #getControlVoluntario
     */
    public void setControlVoluntario(ControladorVoluntario controlVoluntario) {
        this.controlVoluntario = controlVoluntario;
    }

    /**
     * Método que asigna un nuevo valor a la variable voluntario.
     * @param voluntario nuevo valor de la variable. 
     * @see #getVoluntario
     */
    public void setVoluntario(Persona voluntario) {
        this.voluntario = voluntario;
    }

    /**
     * Método que asigna una nueva lista de voluntarios.
     * @param voluntarios nueva lista. 
     * @see #getVoluntarios
     */
    public void setVoluntarios(List<Persona> voluntarios) {
        this.voluntarios = voluntarios;
    }

    /**
     * Método que devuelve el valor de la variable titulo.
     * @return titulo
     * @see #setTitulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * Método que establece el valor de la variable título.
     * @param titulo Nuevo valor de la variable
     * @see #getTitulo
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
}
